﻿package Daos;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import logica.objetos.Imagen;
import excepciones.PersistenciaException;

/**
 * @version 8/3/13
 * @author GRUPODOS
 *
 */
public class Imagenes {
	/**
	 * ingresa una imagen a la base
	 * @param t  la transaccion         
	 * @param i  la imagen          
	 * @return el id recien generado
	 * @throws PersistenciaException  si ocurre error SQL
	 */
	public int insertarImagen(Connection t, Imagen i)
			throws PersistenciaException {
		int resu = 0;
		try {
			ConsultasSQL consultas = new ConsultasSQL();

			String query = consultas.insertarImagen();
			PreparedStatement pstmt = t.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
			pstmt.setInt(1, i.getId());
			pstmt.setString(2, i.getDescripcion());
			pstmt.setString(3, i.getUrl());

			pstmt.executeUpdate();

			ResultSet rs = pstmt.getGeneratedKeys();
			if (rs.next())
				resu = rs.getInt(1);

			rs.close();
			pstmt.close();
			

		} catch (SQLException e) {
			throw new PersistenciaException(
					"Ocurrio un error en el acceso a la BD al insertar");
		}
		return resu;
	}

	/**
	 * busca una imagen por su id
	 * @param t  la transaccion
	 * @param id  el id de la imagen buscada
	 * @return la imagen con ese id, null si no existe
	 * @throws PersistenciaException si ocurre error SQL
	 */
	public Imagen buscarPorId(Connection t, int idImagen)
			throws PersistenciaException {
		Imagen resu = null;
		try {
			ConsultasSQL Consulta = new ConsultasSQL();
			String query = Consulta.buscarImagenPorId();
			PreparedStatement pstmt = t.prepareStatement(query);
			pstmt.setInt(1, idImagen);
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				resu = new Imagen(rs.getInt("idImagen"),rs.getString("descripcion"), rs.getString("url"));
			}
			rs.close();
			pstmt.close();

		} catch (SQLException e) {
			throw new PersistenciaException(
					"Ocurrio un error en el acceso a la BD al verificar existencia de dueño");
		}
		return resu;
	}

	/**
	 * retorna todas las imagenes en un array
	 * 
	 * @param t la transaccion
	 * @return array con todas las imagenes
	 * @throws PersistenciaException si ocurre error SQL
	 */
	public Imagen[] listarTodos(Connection t) throws PersistenciaException {
		Imagen[] resu = null;
		
		try {
			ConsultasSQL Consulta = new ConsultasSQL();
			String query = Consulta.listarTodosImagenes();
			PreparedStatement pstmt = t.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			int cantidad = 0;
			if(rs != null)
			{	
				rs.beforeFirst();
				rs.last();
				cantidad = rs.getRow();
				rs.beforeFirst();
			}
			resu= new Imagen[cantidad];
			int i=0;
			while (rs.next()) 
			{
				Imagen img = new Imagen(rs.getInt("idImagen"),rs.getString("descripcion"), rs.getString("url"));
				resu [i] = img;
				i++;
			}
			rs.close();
			pstmt.close();

		} catch (SQLException e) {
			throw new PersistenciaException(
					"Ocurrio un error en el acceso a la BD al verificar existencia de dueño");
		}
		return resu;		
	}
}